Este documento possui o portifolio referente a aula de Programando IA com R, da faculdade FIAP, curso de MBA de Inteligencia Artificial e Machine Learning.
Exercicio 1 - Variaveis:
Crie 10 variaveis e as salve em um arquivo no diretorio de preferencia.
# Variaveis
a <- 1
b <- 2
c <- 3
d <- 4
e <- 5
f <- 6
g <- 7
h <- 8
i <- 9
j <- 10
# Caminho para salvar um arquivo com as variaveis
# path = choose.files()
# Salvar as variaveis no diretorio informado acima
# save(a, b, c, d, e, f, g, h, i, j, file=path)
Exercicio 2 - Vetores, Listas, Matrizes e Dataframes:
Crie um vetor para cada tipo de variavel do R, contendo quatro valores cada.
# Vetores
vetor1 <- c(TRUE, FALSE, TRUE, FALSE)
vetor2 <- c(1L, 2L, 3L, 4L)
vetor3 <- c(11.3, 15.4, 7.6, 93.4)
vetor4 <- c("Duan", "Nunes", "Alves", "Silva")
vetor5 <- c(1i, 2i, 3i, 4i)
Crie uma lista com 5 elementos, cada elemento deve ser um dos vetores criados acima.
# Lista
lista <- list(vetor1, vetor2, vetor3, vetor4, vetor5)
Crie uma matriz 4x4 com 16 valores inteiros pares.
# Matriz
matrix <- matrix(1:16*2, nrow = 4, ncol = 4)
Crie um dataframe onde cada coluna seja um dos vetores criados acima. As linhas devem possuir os nomes L1, L2, L3 e L4.
# DataFrame
dataframe = data.frame(vetor1, vetor2, vetor3, vetor4, vetor5)
colnames(dataframe) = c('vet1', 'vet2', 'vet3', 'vet4', 'vet5')
rownames(dataframe) = c('L1', 'L2', 'L3', 'L4')
Exercicio 1 - Vetores:
Crie 6 vetores.
Vetor A de inteiros, com 5 numeros.
Vetor B com o dobro do Vetor A.
Vetor C com um terco do Vetor B.
Vetor D com C+2?.
Vetor E com Raiz quadrada de D.
Vetor AI com o inverso de A.
# Vetores
vetorA = c(123456, 12345678, 123, 123456, 1234)
vetorB = vetorA * 2
vetorC = vetorB/3
vetorD = vetorC + (vetorA**2)
vetorE = sqrt(vetorD)
vetorAI = rev(vetorA)
Exercicio 2 - Matrizes:
Criar matrizes.
M1 6x5 com cada linha contendo o valor de um dos vetores.
M2 5x6 com cada coluna contendo o valor de um dos vetores.
M3 6x5 com cada elemento contendo 10% de M1, ou seja, M1 x 0,1.
# Criando matriz
m1 = matrix(c(vetorA, vetorB, vetorC, vetorD, vetorE, vetorAI),nrow = 6, ncol = 5, byrow = T)
m2 = matrix(c(vetorA, vetorB, vetorC, vetorD, vetorE, vetorAI),nrow = 5, ncol = 6)
m3 = m1 * 0.10
M4 5x6 sendo uma tabela com 5 linhas e 6 colunas de quaisquer colunas do dataset attitude .
# Consultando o tipo do dataset
class(attitude)
## [1] "data.frame"
# Consultando a dimensao do dataset
dim(attitude)
## [1] 30 7
# Criando matriz
m4 = matrix(c(as.matrix(attitude[1:5, 1:6])), nrow = 5, ncol = 6)
Exercicio 3:
Crie uma matriz 19x19 com os valores 1 e 2 nos elementos, alternadamente.
# Criando matriz
matriz1 = matrix(c(1,2), nrow = 19, ncol = 19, byrow = TRUE)
## Warning in matrix(c(1, 2), nrow = 19, ncol = 19, byrow = TRUE): comprimento
## dos dados [2] não é um submúltiplo ou múltiplo do número de linhas [19]
Subtrair 1 de cada elemento desta matriz.
# Criando matriz
matriz2 = matriz1 -1
Somar 1 para cada elemento da linha 1, 2 na linha 2, e assim por diante ate a coluna 19.
# Criando matriz
matriz3 = matriz2 + c(1:19)
Exercicio 4:
Crie matrizes.
M5 sendo a multiplicacao da matriz M1 e M3.
M6 sendo a multiplicacao da matriz M3 e M1.
M7 sendo a multiplicacao da M1 e M4.
M8 sendo a multiplicacao da M4 e M1.
# Multiplicacao de Matriz
m5 = m1 * m3
m6 = m3 * m1
m7 = m1 %*% m4
m8 = m4 %*% m1
Compare as matrizes M5 com M6 e M7 com M8.
# Comparando matrizes
m5 == m6
## [,1] [,2] [,3] [,4] [,5]
## [1,] TRUE TRUE TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE TRUE TRUE
## [5,] TRUE TRUE TRUE TRUE TRUE
## [6,] TRUE TRUE TRUE TRUE TRUE
# Erro, M7 e M8 possuem dimensões diferentes
dim(m7)
## [1] 6 6
dim(m8)
## [1] 5 5
# m7 == m8
Exercicio 5:
Obter a transporta M1T a M8T de cada uma das matrizes de M1 a M8.
# Transpostas
m1t = t(m1)
m2t = t(m2)
m3t = t(m3)
m4t = t(m4)
m5t = t(m5)
m6t = t(m6)
m7t = t(m7)
m8t = t(m8)
Compare as matrizes: M8 com M8T, M8T com M8.
m8 %*% m8t == m8t %*% m8
## [,1] [,2] [,3] [,4] [,5]
## [1,] FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE FALSE
Exercicio 6 - Malvadao:
Obter o valor da matriz X na equacao A*X = B.
# Calcular a equacao A.X = B
A = as.matrix(attitude[21:25, 1:5])
B = as.matrix(attitude[11:15, 1:5])
X = solve(A) %*% B
# Matrix Identidade de A * B
# Erro esta apartir da 14 casa decimal
# Necessario arredondar apartir da 12 casa, assim, a multiplicacao de A por X e igual a B.
round(A %*% X,12) == B
## rating complaints privileges learning raises
## 21 TRUE TRUE TRUE TRUE TRUE
## 22 TRUE TRUE TRUE TRUE TRUE
## 23 TRUE TRUE TRUE TRUE TRUE
## 24 TRUE TRUE TRUE TRUE TRUE
## 25 TRUE TRUE TRUE TRUE TRUE
Exercicios 7 RMarkdown:
Retornar todos os valores do Dataset Cars.
cars
## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 6 9 10
## 7 10 18
## 8 10 26
## 9 10 34
## 10 11 17
## 11 11 28
## 12 12 14
## 13 12 20
## 14 12 24
## 15 12 28
## 16 13 26
## 17 13 34
## 18 13 34
## 19 13 46
## 20 14 26
## 21 14 36
## 22 14 60
## 23 14 80
## 24 15 20
## 25 15 26
## 26 15 54
## 27 16 32
## 28 16 40
## 29 17 32
## 30 17 40
## 31 17 50
## 32 18 42
## 33 18 56
## 34 18 76
## 35 18 84
## 36 19 36
## 37 19 46
## 38 19 68
## 39 20 32
## 40 20 48
## 41 20 52
## 42 20 56
## 43 20 64
## 44 22 66
## 45 23 54
## 46 24 70
## 47 24 92
## 48 24 93
## 49 24 120
## 50 25 85
Retornar os 5 primeiros valores do Dataset Cars.
head(cars, 5)
## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
Retornar os 5 ultimos valores do Dataset Cars.
tail(cars, 5)
## speed dist
## 46 24 70
## 47 24 92
## 48 24 93
## 49 24 120
## 50 25 85
Retornar o resumo do Dataset Cars.
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
Monte um grafico mostrando cruzamento dos valores do Dataset Cars.
Exercicios 8 - Special Values:
Criar 5 variaveis com os tipos especiais.
# Tipos especiais
te1 = NA
te2 = sqrt(-4)
## Warning in sqrt(-4): NaNs produzidos
te3 = 10/0
te4 = -10/0
te5 = NULL
Crie um vetor com os 5 tipos especiais criados anteriormente.
# Vetor
vetorTE = c(te1, te2, te3, te4, te5)
# à possivel criar o vetor, porém, o dado NULL não foi inserido.
Verificar os valores da 5 variaveis criadas anteriormente.
# Verificacao
is.na(te1)
## [1] TRUE
is.nan(te2)
## [1] TRUE
is.infinite(te3)
## [1] TRUE
is.finite(te4)
## [1] FALSE
is.null(te5)
## [1] TRUE
Exercicios 10 - Sequencias:
Crie uma variavel com 30 valores entre 5 e 10.
# Distribuicao Uniforme
my_seq <- seq(5.0, 10.0, length.out = 30)
Consulte o tamanho do vetor my_seq.
length(my_seq)
## [1] 30
Criar uma sequencia com o tamanho do vetor my_seq.
new_seq = seq_len(length(my_seq))
Exercicio 1 - Simulando Modelo Linear:
set.seed(20)
# Modelo Linear
a = 2.0
b = 0.5
x = rnorm(100)
e = rnorm(100, mean = 0, sd = 2)
y = (a * x) + b + e
plot(x=x, y=y)
Exercicio 2 - Amostragem:
Usando o dataset airquality, facaa:
Verifique as dimensoes do dataset.
dim(airquality)
## [1] 153 6
Obtenha o resumo das colunas.
summary(airquality)
## Ozone Solar.R Wind Temp
## Min. : 1.00 Min. : 7.0 Min. : 1.700 Min. :56.00
## 1st Qu.: 18.00 1st Qu.:115.8 1st Qu.: 7.400 1st Qu.:72.00
## Median : 31.50 Median :205.0 Median : 9.700 Median :79.00
## Mean : 42.13 Mean :185.9 Mean : 9.958 Mean :77.88
## 3rd Qu.: 63.25 3rd Qu.:258.8 3rd Qu.:11.500 3rd Qu.:85.00
## Max. :168.00 Max. :334.0 Max. :20.700 Max. :97.00
## NA's :37 NA's :7
## Month Day
## Min. :5.000 Min. : 1.0
## 1st Qu.:6.000 1st Qu.: 8.0
## Median :7.000 Median :16.0
## Mean :6.993 Mean :15.8
## 3rd Qu.:8.000 3rd Qu.:23.0
## Max. :9.000 Max. :31.0
##
Exibir as 10 primeiras linhas
head(airquality, 10)
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
## 7 23 299 8.6 65 5 7
## 8 19 99 13.8 59 5 8
## 9 8 19 20.1 61 5 9
## 10 NA 194 8.6 69 5 10
Exibir 10 linhas aleatoriamente.
set.seed(10)
airquality[sample(nrow(airquality), 10), ]
## Ozone Solar.R Wind Temp Month Day
## 78 35 274 10.3 82 7 17
## 47 21 191 14.9 77 6 16
## 65 NA 101 10.9 84 7 4
## 104 44 192 11.5 86 8 12
## 13 11 290 9.2 66 5 13
## 34 NA 242 16.1 67 6 3
## 41 39 323 11.5 87 6 10
## 40 71 291 13.8 90 6 9
## 90 50 275 7.4 86 7 29
## 62 135 269 4.1 84 7 1
Exercicio 3 - Loop:
Crie um script que percorre o dataset AirPassengers.
for (i in AirPassengers){
print(i)
}
## [1] 112
## [1] 118
## [1] 132
## [1] 129
## [1] 121
## [1] 135
## [1] 148
## [1] 148
## [1] 136
## [1] 119
## [1] 104
## [1] 118
## [1] 115
## [1] 126
## [1] 141
## [1] 135
## [1] 125
## [1] 149
## [1] 170
## [1] 170
## [1] 158
## [1] 133
## [1] 114
## [1] 140
## [1] 145
## [1] 150
## [1] 178
## [1] 163
## [1] 172
## [1] 178
## [1] 199
## [1] 199
## [1] 184
## [1] 162
## [1] 146
## [1] 166
## [1] 171
## [1] 180
## [1] 193
## [1] 181
## [1] 183
## [1] 218
## [1] 230
## [1] 242
## [1] 209
## [1] 191
## [1] 172
## [1] 194
## [1] 196
## [1] 196
## [1] 236
## [1] 235
## [1] 229
## [1] 243
## [1] 264
## [1] 272
## [1] 237
## [1] 211
## [1] 180
## [1] 201
## [1] 204
## [1] 188
## [1] 235
## [1] 227
## [1] 234
## [1] 264
## [1] 302
## [1] 293
## [1] 259
## [1] 229
## [1] 203
## [1] 229
## [1] 242
## [1] 233
## [1] 267
## [1] 269
## [1] 270
## [1] 315
## [1] 364
## [1] 347
## [1] 312
## [1] 274
## [1] 237
## [1] 278
## [1] 284
## [1] 277
## [1] 317
## [1] 313
## [1] 318
## [1] 374
## [1] 413
## [1] 405
## [1] 355
## [1] 306
## [1] 271
## [1] 306
## [1] 315
## [1] 301
## [1] 356
## [1] 348
## [1] 355
## [1] 422
## [1] 465
## [1] 467
## [1] 404
## [1] 347
## [1] 305
## [1] 336
## [1] 340
## [1] 318
## [1] 362
## [1] 348
## [1] 363
## [1] 435
## [1] 491
## [1] 505
## [1] 404
## [1] 359
## [1] 310
## [1] 337
## [1] 360
## [1] 342
## [1] 406
## [1] 396
## [1] 420
## [1] 472
## [1] 548
## [1] 559
## [1] 463
## [1] 407
## [1] 362
## [1] 405
## [1] 417
## [1] 391
## [1] 419
## [1] 461
## [1] 472
## [1] 535
## [1] 622
## [1] 606
## [1] 508
## [1] 461
## [1] 390
## [1] 432
Crie um vetor que contenha o valor acumulado de passageiros ao longo do tempo.
#Loop Acumulado
total = 0
vector = c()
for (i in AirPassengers){
total = total + i
vector = c(vector, total)
}
print(vector)
## [1] 112 230 362 491 612 747 895 1043 1179 1298 1402
## [12] 1520 1635 1761 1902 2037 2162 2311 2481 2651 2809 2942
## [23] 3056 3196 3341 3491 3669 3832 4004 4182 4381 4580 4764
## [34] 4926 5072 5238 5409 5589 5782 5963 6146 6364 6594 6836
## [45] 7045 7236 7408 7602 7798 7994 8230 8465 8694 8937 9201
## [56] 9473 9710 9921 10101 10302 10506 10694 10929 11156 11390 11654
## [67] 11956 12249 12508 12737 12940 13169 13411 13644 13911 14180 14450
## [78] 14765 15129 15476 15788 16062 16299 16577 16861 17138 17455 17768
## [89] 18086 18460 18873 19278 19633 19939 20210 20516 20831 21132 21488
## [100] 21836 22191 22613 23078 23545 23949 24296 24601 24937 25277 25595
## [111] 25957 26305 26668 27103 27594 28099 28503 28862 29172 29509 29869
## [122] 30211 30617 31013 31433 31905 32453 33012 33475 33882 34244 34649
## [133] 35066 35457 35876 36337 36809 37344 37966 38572 39080 39541 39931
## [144] 40363
Exercicio 3 - Funcoes:
Crie uma funcao fatorial que retorna o fatorial de um numero inteiro.
Fatorial <- function (valor){
total = valor
while(valor > 1){
total = total * (valor - 1)
valor = (valor - 1)
}
return(total)
}
Fatorial(5)
## [1] 120
Crie uma funcao que retorne a mesma resposta do exercicio ‘Loop acumulado’. Passar o dataset AirPassagers como parametro. Passar a coluna ‘mpg’ do dataset mtcars como parametro.
Loop.Acumulado = function(data){
total = 0
vector = c()
for (i in data){
total = total + i
vector = c(vector, total)
}
return (vector)
}
# Chama a Funcao - Air Passengers
Loop.Acumulado(AirPassengers)
## [1] 112 230 362 491 612 747 895 1043 1179 1298 1402
## [12] 1520 1635 1761 1902 2037 2162 2311 2481 2651 2809 2942
## [23] 3056 3196 3341 3491 3669 3832 4004 4182 4381 4580 4764
## [34] 4926 5072 5238 5409 5589 5782 5963 6146 6364 6594 6836
## [45] 7045 7236 7408 7602 7798 7994 8230 8465 8694 8937 9201
## [56] 9473 9710 9921 10101 10302 10506 10694 10929 11156 11390 11654
## [67] 11956 12249 12508 12737 12940 13169 13411 13644 13911 14180 14450
## [78] 14765 15129 15476 15788 16062 16299 16577 16861 17138 17455 17768
## [89] 18086 18460 18873 19278 19633 19939 20210 20516 20831 21132 21488
## [100] 21836 22191 22613 23078 23545 23949 24296 24601 24937 25277 25595
## [111] 25957 26305 26668 27103 27594 28099 28503 28862 29172 29509 29869
## [122] 30211 30617 31013 31433 31905 32453 33012 33475 33882 34244 34649
## [133] 35066 35457 35876 36337 36809 37344 37966 38572 39080 39541 39931
## [144] 40363
# Chama a Funcao - mtcars, coluna mpg
Loop.Acumulado(mtcars$mpg)
## [1] 21.0 42.0 64.8 86.2 104.9 123.0 137.3 161.7 184.5 203.7 221.5
## [12] 237.9 255.2 270.4 280.8 291.2 305.9 338.3 368.7 402.6 424.1 439.6
## [23] 454.8 468.1 487.3 514.6 540.6 571.0 586.8 606.5 621.5 642.9
Exercicio 1 - Download de arquivos da Internet
Crie uma funcao que receba um URL e baixe o arquivo sempre na pasta /data.
baixa_arquivos = function(file.url){
if (!file.exists('data')){
dir.create('data')
}
file.local = file.path('./data', basename(file.url))
download.file(url = file.url, destfile = file.local , mode='wb')
}
Baixe os arquivos listados atraves da funcao criada.
#1
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/Copas.csv'
baixa_arquivos(file.url)
#2
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/Copas-Partidas.csv'
baixa_arquivos(file.url)
#3
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/Copas-Jogadores.csv'
baixa_arquivos(file.url)
Exercicio 2 - Lendo arquivos Excel
Baixe os arquivos de Baltimore.
library("xlsx")
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/cameras.baltimore.xlsx'
baixa_arquivos(file.url)
file = read.xlsx(file = './data/cameras.baltimore.xlsx', sheetIndex = 1, header = TRUE, encoding = 'UTF-8')
Identifique a camera de radar mais ao Norte, ao Sul, ao Leste e ao Oeste, lendo o dataset de Baltimore.
# Sul
min(file$Lat)
## [1] 39.19991
# Norte
max(file$Lat)
## [1] 39.37049
# Oeste
min(file$Long)
## [1] -76.71024
# Leste
max(file$Long)
## [1] -76.53237
Exercicio 3 - Dplyr
Carregue o dataset BrFlights2 e crie novas colunas usando o comando MUTATE.
library("tidyverse")
library("dplyr")
load("./data/BrFlights2.RData")
BrFlights2 = mutate(BrFlights2,
Partida.Atraso = (BrFlights2$Partida.Real - BrFlights2$Partida.Prevista),
Chegada.Atraso = (BrFlights2$Chegada.Real - BrFlights2$Chegada.Prevista),
DistanciaEuc = sqrt((BrFlights2$LongOrig - BrFlights2$LongDest)^2 + (BrFlights2$LatOrig - BrFlights2$LatDest)^2),
TempoViagem.Real = (BrFlights2$Chegada.Real - BrFlights2$Partida.Real))
Crie as mesmas colunas solicitadas anteriormente e adicione a coluna de Atraso.Relativo, mas desta vez utilizando pipe.
BrFlights2 = BrFlights2 %>%
mutate(Partida.Atraso = Partida.Real - Partida.Prevista) %>%
mutate(Chegada.Atraso = Chegada.Real - Chegada.Prevista) %>%
mutate(DistanciaEuc = sqrt((LongOrig - LongDest)^2 + (LatOrig - LatDest)^2)) %>%
mutate(TempoViagem.Real = Chegada.Real - Partida.Real) %>%
mutate(Atraso.Relativo = Chegada.Atraso - mean(Chegada.Atraso, na.rm = TRUE))
Quais sao os Voos da Azul no dataset?
BrFlights2 %>% filter(Companhia.Aerea == "AZUL") -> Azul
Quais sao os 100 maiores atrasos de chegada de voos nacional/regionais?
BrFlights2 %>% filter(Codigo.Tipo.Linha != 'Internacional') %>%
arrange(desc(Chegada.Atraso)) %>%
head(100)
## # A tibble: 100 x 26
## Voos Companhia.Aerea Codigo.Tipo.Lin~ Partida.Prevista
## <chr> <chr> <chr> <dttm>
## 1 ONE ~ AVIANCA BRASIL Nacional 2016-03-14 23:15:00
## 2 GLO ~ GOL Nacional 2016-03-14 01:18:00
## 3 TAM ~ TAM Regional 2016-03-14 15:14:00
## 4 GLO ~ GOL Nacional 2016-03-14 16:00:00
## 5 ONE ~ AVIANCA BRASIL Nacional 2016-03-14 20:00:00
## 6 ONE ~ AVIANCA BRASIL Nacional 2016-03-14 17:45:00
## 7 ONE ~ AVIANCA BRASIL Nacional 2016-03-14 20:32:00
## 8 ONE ~ AVIANCA BRASIL Nacional 2016-03-14 22:20:00
## 9 TAM ~ TAM Nacional 2016-03-14 14:35:00
## 10 ONE ~ AVIANCA BRASIL Nacional 2016-03-14 20:25:00
## # ... with 90 more rows, and 22 more variables: Partida.Real <dttm>,
## # Chegada.Prevista <dttm>, Chegada.Real <dttm>, Situacao.Voo <chr>,
## # Codigo.Justificativa <chr>, Aeroporto.Origem <chr>,
## # Cidade.Origem <chr>, Estado.Origem <chr>, Pais.Origem <chr>,
## # Aeroporto.Destino <chr>, Cidade.Destino <chr>, Estado.Destino <chr>,
## # Pais.Destino <chr>, LongDest <dbl>, LatDest <dbl>, LongOrig <dbl>,
## # LatOrig <dbl>, Partida.Atraso <time>, Chegada.Atraso <time>,
## # DistanciaEuc <dbl>, TempoViagem.Real <time>, Atraso.Relativo <time>
Qual companhia aerea com maior atraso medio?
BrFlights2 %>%
group_by(Companhia.Aerea) %>%
summarise(medio = mean(Chegada.Atraso, na.rm = TRUE)) %>%
arrange(desc(medio)) %>%
head(1)
## # A tibble: 1 x 2
## Companhia.Aerea medio
## <chr> <time>
## 1 AIR CHINA 5501.159 secs
Exercicio 1 - Plot Gerar um grafico do dataset cars com a relacao velocidade x distancia percorrida ate parar.
plot(x = cars$speed, y=cars$dist)
Exercicio 2 - Basic Plot
Utilizando o dataset airquality, gere um grafico.
library("lattice")
library("ggplot2")
library("plotly")
library("plot3D")
#
s = airquality %>%
filter( Month == 5 ) %>%
select( Ozone ) %>%
summary()
airquality %>% filter(Month == 5) %>%
select (Ozone) %>%
arrange(Ozone) %>%
unlist() %>%
plot() %>%
lines(x = 0:27, y = rep( 1.00, 27+1), type = 'l', col='BLUE') %>%
lines(x = 0:27, y = rep(11.00, 27+1), type = 'l', col='BLUE') %>%
lines(x = 0:27, y = rep(18.00, 27+1), type = 'l', col='RED') %>%
lines(x = 0:27, y = rep(31.50, 27+1), type = 'l', col='BLUE') %>%
lines(x = 0:27, y = rep(115.00, 27+1), type = 'l', col='BLUE')
Crie um Boxplot utilizando o dataset airquality, que permita a avaliacao mensal de Ozonio.
boxplot(airquality$Ozone ~ airquality$Month)
Qual mes possui maior media de O3? Qual mes possui maior concentracao de O3? Qual mes apresenta a menor variancia de O3? E o menor? Qual o mes com a maior temperatura media? E qual tem a maior temperatura registrada? O mes com mais ventos e o mesmo que possui mais radiacao solar?
boxplot(airquality$Ozone ~ airquality$Month)
boxplot(airquality$Temp ~ airquality$Month)
boxplot(airquality$Wind ~ airquality$Month)
boxplot(airquality$Solar ~ airquality$Month)
Gerando dois graficos no mesmo plot usando a funcao WITH.
par(mfrow=c(1,2))
with (airquality, {
plot(Wind, Ozone, main = 'Ozonio pelo Vento')
plot(Solar.R, Ozone, main = 'Ozonio pelo Radial')
})
Usando Lattice para gerar graficos.
state <- data.frame(state.x77, region = state.region)
xyplot(Life.Exp ~ Income | region, data = state, layout = c(4, 1))
Exercicio 1 - Plot
Criar uma populacao amostral com duas dimensoes, X e Y, usando distribuiacao normal, considerando:
- 15 observacoes;
- 3 centroides;
- 5 observacoes por centroide.
Ao fianal, fa?a um plot.
library("dplyr")
library("readr")
library("plotly")
library("zoo")
library("dendextend")
library("ape")
set.seed(10)
x = rnorm(15, mean = rep(1:3, each = 5), sd = 0.2)
y = rnorm(15, mean = rep(c(1, 2), each = 5), sd = 0.2)
# pch = tipo do icone
# cex = tamanho do pixel
plot(x, y, col = 'red', pch = 19, cex = 1)
# adiciona os nomes no plot
text(x + 0.05, y + 0.05, labels = as.character(1:15))
Executando K-Means para o exemplo acima:
set.seed(10)
x = rnorm(15, mean = rep(1:3, each = 5), sd = 0.2)
y = rnorm(15, mean = rep(c(1, 2), each = 5), sd = 0.2)
my_data = data.frame(x,y)
modelo = kmeans(x = my_data, centers = 3)
plot(x, y, col = modelo$cluster, pch = 19, cex = 1)
text(x + 0.05, y + 0.05, labels = as.character(1:15))
Exercicio 2 - Fifa dataset
Filtre o dataset Fifa com o atributos name, dribbling e acceleration, para os 602 jogadores da liga espanhola. Ao final, plotar o resultado.
library("readr")
fifa_game = read_csv("./data/fifa game-2.csv",locale = locale(encoding = 'ISO-8859-1'))
clean = fifa_game %>% filter(fifa_game$league == 'Spanish Primera División') %>%
select(name, dribbling, acceleration)
plot(y=clean$acceleration, x=clean$dribbling)
Execute o KMeans com 4 centroides.
set.seed(10)
my_data = data.frame(clean$dribbling, clean$acceleration)
modelo = kmeans(x = my_data, centers = 4)
plot(clean$dribbling, clean$acceleration, col = modelo$cluster, pch = 16, cex = 1)
points(modelo$centers, col = 6, bg = 5, pch = 24, cex = 3, lwd = 2)
Utilizando plotly para visualizacao.
#Com o Plotly
plot_ly(data = clean,
x = ~dribbling, y = ~acceleration,
text = ~name,
type = 'scatter',
mode='markers',
color = modelo$cluster)
Utilizando Plot 3D.
#Plot 3d
clean3d = fifa_game %>% filter(fifa_game$league == 'Spanish Primera División') %>%
select(name, dribbling, acceleration, long_passing)
set.seed(2)
my_data = data.frame(clean3d$dribbling, clean3d$acceleration, clean3d$long_passing)
modelo = kmeans(x = my_data, centers = 4)
plot(clean$dribbling, clean$acceleration, col = modelo$cluster, pch = 19, cex = 1)
points(modelo$centers, col = 6, bg = 5, pch = 19, cex = 3, lwd = 2)
Utilizando Plotly 3D para visualizacao.
plot_ly(data = clean3d ,
x = ~dribbling, y = ~acceleration, z = ~long_passing,
text = ~name,
type = 'scatter3d',
mode = 'markers',
color = modelo$cluster,
size = rep(1, dim(clean3d)[1], sizes = c(3.0)))
asdasda
#Mapa de calor
library("tidyr")
fifa_cores = c("white", "#63be7b", "#ffeb84", "#f8696b")
fifa_gradiente = colorRampPalette(fifa_cores)(n = 30)
fifa_game %>% filter(league=='Spanish Primera División') %>%
select (name, age, height_cm, dribbling) -> spain.colors
with(spain.colors, plot(x = height_cm, y = age))
alturas = min(spain.colors$height_cm):max(spain.colors$height_cm)
idades = min(spain.colors$age):max(spain.colors$age)
#
crossing(height_cm = alturas,
age = idades
) -> spain.colors.crossing
#
spain.colors %>%
group_by(height_cm, age) %>%
summarise(
dribbling.avg = mean(dribbling)
) %>%
right_join(spain.colors.crossing, by=c('height_cm' = 'height_cm', 'age'='age')) %>%
na.fill(fill=0) %>%
data.frame() -> spain.colors.group
#
with(spain.colors.group,
image(x = alturas,
xlab = "Altura cm",
y = idades,
ylab = "Idade",
main = "Dribbling",
z = t(matrix(dribbling.avg, nrow = length(idades)) ),
col = fifa_gradiente
)
)
** Exercicio 1 - Arvore de Decisao**
Faca uma arvora de decisao para o dataset iris utilizando todos os atributos.
library("plyr")
library("tree")
set.seed(10)
iris.modelo = tree(data = iris, formula = Species ~ Sepal.Width + Petal.Width + Sepal.Length + Petal.Length)
plot(iris.modelo)
text(iris.modelo)
# Resultado com todas variaveis reduz o erro para 2%
# Deterministico: Sempre da o mesmo resultado na arvore, ou seja, o mesmo peso.
# Nao e necesserio Normalizacao
summary(iris.modelo)
##
## Classification tree:
## tree(formula = Species ~ Sepal.Width + Petal.Width + Sepal.Length +
## Petal.Length, data = iris)
## Variables actually used in tree construction:
## [1] "Petal.Width" "Petal.Length" "Sepal.Length"
## Number of terminal nodes: 6
## Residual mean deviance: 0.1253 = 18.05 / 144
## Misclassification error rate: 0.02667 = 4 / 150
Exercicio 2 - Random Forest
Utilize Random Forest para gerar uam regressao no dataset MASS:Boston.
library("randomForest")
set.seed(10)
ind = sample(2, nrow(MASS::Boston), replace=TRUE, prob=c(0.7, 0.3))
# Treino
bostonTrain = MASS::Boston[ind==1,]
# Teste
bostonTest = MASS::Boston[ind==2,]
# Gerando Modelo
boston.model = randomForest(medv ~., data = bostonTrain, ntree=500, proximity=TRUE)
predicao = predict(boston.model, bostonTest[,1:13])
plot(boston.model)
summary(boston.model)
## Length Class Mode
## call 5 -none- call
## type 1 -none- character
## predicted 348 -none- numeric
## mse 500 -none- numeric
## rsq 500 -none- numeric
## oob.times 348 -none- numeric
## importance 13 -none- numeric
## importanceSD 0 -none- NULL
## localImportance 0 -none- NULL
## proximity 121104 -none- numeric
## ntree 1 -none- numeric
## mtry 1 -none- numeric
## forest 11 -none- list
## coefs 0 -none- NULL
## y 348 -none- numeric
## test 0 -none- NULL
## inbag 0 -none- NULL
## terms 3 terms call
Exercicio 1 - Correlacao
Verificando correlacao dos dados
set.seed(10)
x = 1:10 + rnorm(10)
y = (1:10*2) - rnorm(10, mean = 2 )
plot(x=x, y=y, pch=4)
modelo = lm(y ~ x, data.frame(x,y))
abline( modelo , col="red")
sprintf("Correlacao: %f", cor(x=x, y=y))
## [1] "Correlacao: 0.961936"
Carregue o dataset spam, identifique as colunas com correlacao acima de 80%, plot as colunas para visualizacao.
library("caret")
library("kernlab")
data(spam)
# Correlacao
relation = cor(spam[,-58])
# Filtro de correlacao
relation[relation >= 0.8]
## [1] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [8] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [15] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [22] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [29] 1.0000000 1.0000000 1.0000000 1.0000000 0.9960661 0.8480207 1.0000000
## [36] 0.9960661 1.0000000 0.8453591 1.0000000 1.0000000 1.0000000 1.0000000
## [43] 1.0000000 0.8480207 0.8453591 1.0000000 1.0000000 1.0000000 1.0000000
## [50] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [57] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
Exercicio 2 - Predicao
Realize uma predicao utilizando o dataset spam.
set.seed(10)
library("e1071")
# Separacao dos datasets
index = sample(2, nrow(spam), replace=TRUE, prob=c(0.7, 0.3))
# Treino
spam_treino = spam[index==1,]
# Teste
spam_teste = spam[index==2,]
# Correlacoes
# Remove atributo alvo
correlacoes <- spam_treino[,-58]
# Matriz com valores absolutos das correlacoes
matriz <- abs(cor(correlacoes))
# Matriz diagonal
diag(matriz) <- 0
# Retorna onde os indices sao TRUE
which(matriz > 0.8, arr.ind = T)
## row col
## num415 34 32
## direct 40 32
## num857 32 34
## num857 32 40
# Correlacao das colunas
sprintf("Correlacao: %f", cor(spam_treino$num415, spam_treino$num857))
## [1] "Correlacao: 0.994814"
# Dados correlacionados
plot(spam_treino$num415, spam_treino$num857)
# Definindo qual tecnica de reducao utilizar
plot(spam_treino$num415 + spam_treino$num857)
plot(spam_treino$num415 - spam_treino$num857)
plot(spam_treino$num415 * spam_treino$num857)
plot(spam_treino$num415 / spam_treino$num857)
# Treino
spam_treino = mutate(spam_treino, novoCampo = (spam_treino$num415 + spam_treino$num857)*0.5)
spam_treino$num415 = NULL
spam_treino$num857 = NULL
# Teste
spam_teste = mutate(spam_teste, novoCampo = (spam_teste$num415 + spam_teste$num857)*0.5)
spam_teste$num415 = NULL
spam_teste$num857 = NULL
# Regressao
regressao = train(type ~ . , spam_treino, method="glm")
regressao
## Generalized Linear Model
##
## 3178 samples
## 56 predictor
## 2 classes: 'nonspam', 'spam'
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 3178, 3178, 3178, 3178, 3178, 3178, ...
## Resampling results:
##
## Accuracy Kappa
## 0.9210603 0.8340019
predicao = predict(regressao, spam_teste)
# 2 as spam
# 1 as nonspam
confusionMatrix(predicao, spam_teste$type)
## Confusion Matrix and Statistics
##
## Reference
## Prediction nonspam spam
## nonspam 820 59
## spam 53 491
##
## Accuracy : 0.9213
## 95% CI : (0.9061, 0.9348)
## No Information Rate : 0.6135
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8337
## Mcnemar's Test P-Value : 0.6366
##
## Sensitivity : 0.9393
## Specificity : 0.8927
## Pos Pred Value : 0.9329
## Neg Pred Value : 0.9026
## Prevalence : 0.6135
## Detection Rate : 0.5762
## Detection Prevalence : 0.6177
## Balanced Accuracy : 0.9160
##
## 'Positive' Class : nonspam
##